#include <gtest/gtest.h>
#include <unordered_map>
#include <iostream>

/*
    TestSuite事件
    针对的是测试套件(TEST_F的第一个参数),可以定义成员变量，在单元测试中访问。
    SetUpTestCase和TearDownTestCase在测试套件的开始和结束时调用
    但是单元测试之间执行的语句是不共享的，也就是insert_test单元测试中的插入操作，在size_test是没有的
    另外必须使用Test_F宏函数,第一个参数必须和类名一致，这样才能通过类名访问到成员变量

*/

class HashTestEnv1 : public testing::Test
{
public:
    static void SetUpTestCase()
    {
        std::cout << "环境1第⼀个TEST之前调⽤\n";
    }
    static void TearDownTestCase()
    {
        std::cout << "环境1最后⼀个TEST之后调⽤\n";
    }

public:
    std::unordered_map<std::string, std::string> dict;
};

TEST_F(HashTestEnv1, insert_test)
{
    std::cout << "环境1,中间insert测试\n";
    dict.insert(std::make_pair("Hello", "你好"));
    dict.insert(std::make_pair("hello", "你好"));
    dict.insert(std::make_pair("雷吼", "你好"));
    auto it = dict.find("hello");
    ASSERT_NE(it, dict.end());
}

TEST_F(HashTestEnv1, sizeof)
{
    std::cout << "环境1,中间size测试\n";
    ASSERT_GT(dict.size(), 0);
}

int main(int argc, char *argv[])
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}